/*135 分糖果*/
/*
一群孩子站成一排，每一个孩子有自己的评分。现在需要给这些孩子发糖果，规则是如果一个孩子的评分比自己身旁的一个孩子要高，那么这个孩子就必须得到比身旁孩子更多的糖果；所有孩子至少要有一个糖果。求解最少需要多少个糖果

输入输出样例：
	输入是一个数组，表示孩子的评分。输出是最少糖果的数量
	Input：[1, 0, 2]    在这个样例中，最少的糖果分法是[2, 1, 2]
Output： 5

分析：
	把所有孩子的糖果数初始化为 1；先从左往右遍历一遍，如果右边孩子的评分比左边的高，则右边孩子的糖果数更新为左边孩子的糖果数加 1；
	再从右往左遍历一遍，如果左边孩子的评分比右边的高，且左边孩子当前的糖果数不大于右边孩子的糖果数，则左边孩子的糖果数更新为右边孩子的糖果数加 1 。在每次遍历中，只考虑并更新相邻一侧的大小关系
*/
int candy(vector<int> &ratings)
{
	int size = ratings.size();
	if (size < 2)
	{
		return size;
	}


	vector<int> num(size, 1);
	for (int i = 1; i < size; ++i)
	{
		if (ratings[i] > ratings[i - 1])
		{
			num[i] = num[i - 1] + 1;
		}
	}
	for (int i = size - 1; i > 0; --i)
	{
		if (ratings[i] < ratings[i - 1])
		{
			num[i - 1] = max(num[i - 1], num[i] + 1);
		}
	}
	return accumulate(num.begin(), num.end(), 0); //求和
}